<?php

namespace Orders\Entity;

class PushOrderPublicEntity
{
    private string $Version;        // 接口版本
    private string $CompanyCode;    // 企业编号
    private string $OptType;        // 操作类型: 1-新增、2-修改
    private string $CreateTime;     // 创建日期
    private string $CustomCode;     // 关区代码

    public function __construct(array $param)
    {
        $this->Version      =   $param['Version']       ??  '1.0';          
        $this->CompanyCode  =   $param['CompanyCode']   ??  '650168000V';   // 企业编号
        $this->OptType      =   $param['OptType']       ??  '1';            // 操作类型: 1-新增、2-修改  
        $this->CreateTime   =   $param['CreateTime']    ??  date('Y-m-d H:i:s');
        $this->CustomCode   =   $param['CustomCode']    ??  '9429';         // 关区代码
    }

    public function getAllAttributes(): array
    {
        $attributes = [];
        $reflectionClass = new \ReflectionClass($this);
        $properties = $reflectionClass->getProperties(\ReflectionProperty::IS_PRIVATE);

        foreach ($properties as $property) {
            $propertyName = $property->getName();
            if(is_null($this->$propertyName)){
                throw new \Exception("方法 $propertyName 不能为空");
            }
            $attributes[$propertyName] = $this->$propertyName;
        }

        return $attributes;
    }
    
    // Setter方法
    public function __set($name, $value) {
        if (property_exists($this, $name)) {
            $this->$name = $value;
        } else {
            throw new \Exception("方法 $name 不存在");
        }
    }

    // Getter方法
    public function __get($name) {
        if (property_exists($this, $name)) {
            return $this->$name;
        } else {
            throw new \Exception("方法 $name 不存在");
        }
    }
}

